package anthology.daily_question._24_10;
//https://leetcode.cn/problems/count-pairs-that-form-a-complete-day-ii/description/?envType=daily-question&envId=2024-10-23
public class _3185构成整天的下标对数目2 {
    /**
     * 对于有两个变量的题目，通常可以枚举其中一个变量，把它视作常量，从而转化成只有一个变量的问题。
     */
    //哈希表记录的是位于我们当前枚举的 hours[i] 左边的元素，也就是说我们是在枚举右边值的同时维护左边的元素。
    public long countCompleteDayPairs(int[] hours) {
        long count = 0;
        int[] cnt = new int[24];
        for(int i : hours){
            count += cnt[(24 - i % 24) % 24];
            cnt[i % 24]++;
        }
        return count;
    }
    class Solution {
        public long countCompleteDayPairs(int[] hours) {
            final int H = 24;
            long ans = 0;
            int[] cnt = new int[H];
            for (int t : hours) {
                // 先查询 cnt，再更新 cnt，因为题目要求 i < j
                // 如果先更新，再查询，就把 i = j 的情况也考虑进去了
                ans += cnt[(H - t % H) % H];
                cnt[t % H]++;
            }
            return ans;
        }
    }
}
